package com.zwz.control;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zwz.bean.UserLoginInfo;
import com.zwz.control.util.R;
import com.zwz.service.UserLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserLoginController {

    @Autowired
    private UserLoginService userLoginService;


    /**
     * 用户注册，注册成功后会在用户个人信息表中插入用户账号的id
     *
     * @param userLoginInfo 参数封装
     * @return Result
     */
    @PostMapping(value = "/regist")
    public R register(@RequestBody UserLoginInfo userLoginInfo) {
        UserLoginInfo userLoginInfo1 = userLoginService.register(userLoginInfo);
        if (userLoginInfo1 == null) {
            return new R(false, "用户名已存在！");
        } else {
            return new R(true, userLoginInfo1, "注册成功！");
        }
    }

    /**
     * 用户登录
     *
     * @param userLoginInfo 参数封装
     * @return Result
     */

    @PostMapping("/login")
    public R login(@RequestBody UserLoginInfo userLoginInfo) {
        Integer userId = userLoginService.login(userLoginInfo);
        if (userId == null) {
            return new R(false, "用户名或密码错误");
        } else {
            userLoginInfo.setId(userId);
            userLoginInfo.setPassword("");
            return new R(true, userLoginInfo, "登录成功");
        }
    }

    /**
     * 用户账号分页查询，由管理员请求
     * @param currentPage 当前页码
     * @param pageSize 每页数据行数
     * @param userLoginInfo 用户账号信息，用于查询，可以不写
     * @return
     */
    @GetMapping("/page/{currentPage}/{pageSize}")
    public R getAll(@PathVariable int currentPage, @PathVariable int pageSize, UserLoginInfo userLoginInfo) {
        IPage<UserLoginInfo> page = userLoginService.getPage(currentPage, pageSize, userLoginInfo);
        // 如果当前页面值大于总页码值，那么重新执行查询操作，使用最大页码值作为当前页码值
        if (currentPage > page.getPages()) {
            page = userLoginService.getPage((int) page.getPages(), pageSize, userLoginInfo);
        }
        return new R(true, page);
    }

    /**
     * 删除用户账号，同时删除用户信息表中的用户数据
     * @param id 用户账号id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    public R deleteAdmin(@PathVariable Integer id) {
        boolean flag = userLoginService.deleteById(id);
        return new R(flag, flag ? "删除成功^_^" : "删除失败-_-!");
    }

}

